#ifndef __GRAPH_NODE_H_INCLUDE__
#define __GRAPH_NODE_H_INCLUDE__

#include <irrlicht.h>
using namespace irr;

enum{
    invalid_node_index    = -1
};

class GraphNode
{
protected:
	int m_iIndex;

public:
	GraphNode():m_iIndex(invalid_node_index){}
	GraphNode(int idx):m_iIndex(idx){}
	
	virtual ~GraphNode(){}

	int getIndex()const{
		return m_iIndex;
	}

	void setIndex(int newIndex){
		m_iIndex = newIndex;
	}
};

template <class extra_info = void*>
class NavGraphNode : public GraphNode
{
protected:
	//the node's position
	core::vector2df  m_vPosition;
public:
  NavGraphNode(){}

  NavGraphNode(int idx, core::vector2df pos)
	  :GraphNode(idx), m_vPosition(pos) {}

  virtual ~NavGraphNode(){}

  core::vector2df getPosition()const{
	  return m_vPosition;
  }

  void setPosition(core::vector2df newPosition){
	  m_vPosition = newPosition;
  }

};

#endif